﻿/***********************************************************************************\
| Copyright (c) 2011, Bashar Al-Rawi                                                |
| All rights reserved.                                                              |
|                                                                                   |
| Redistribution and use in source and binary forms, with or without                |
| modification, are permitted provided that the following conditions are met:       |
|    * Redistributions of source code must retain the above copyright               |
|      notice, this list of conditions and the following disclaimer.                |
|    * Redistributions in binary form must reproduce the above copyright            |
|      notice, this list of conditions and the following disclaimer in the          |
|      documentation and/or other materials provided with the distribution.         |
|    * Neither the name of the <organization> nor the                               |
|      names of its contributors may be used to endorse or promote products         |
|      derived from this software without specific prior written permission.        |
|                                                                                   |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND   |
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED     |
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE            |
| DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY                |
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES        |
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;      |
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND       |
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT        |
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS     |
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                      |
\***********************************************************************************/

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.ComponentModel;
using System.Diagnostics;

namespace Arabic.Controls
{
    public class ApplicationGlobals : System.ComponentModel.INotifyPropertyChanged
    {
        public static ApplicationGlobals Instance;

        static ApplicationGlobals()
        {
            Instance = new ApplicationGlobals();
            textboxBrush = new SolidColorBrush(ApplicationGlobals.TextboxColor);
            textboxEditBrush = new SolidColorBrush(ApplicationGlobals.TextBoxEditColor);
            storageHelper = new StorageHelper();
        }
        public static double AppBarLengthPortraitHeight = 60;
        public static double AppBarLengthLandscapeLeftHeight = 90;
        public static double AppBarLengthLandscapeRightHeight = 70;
        private static StorageHelper storageHelper;
        public static StorageHelper ApplicationPersistedSettings
        {
            get
            {
                return storageHelper;
            }
        }
        private static PageOrientation orientation;
        public PageOrientation Orientation 
        { 
            get
            {
                return orientation;
            }
            set
            {
                orientation = value;
                if (IsLandscape)
                {
                    Width = 800 - AppBarLengthLandscapeLeftHeight;
                    Height = 480;
                }
                else
                {
                    Width = 480;
                    Height = 800 - AppBarLengthPortraitHeight; //excluding APp Bar
                }
            }
        }

        public static double Width {get; private set;}
        public static double Height { get; private set; }
        internal static Brush BgBrush
        {
            get
            {
                return (Brush)Application.Current.Resources["PhoneBackgroundBrush"];
            }
        }

        internal static Brush FgBrush
        {
            get { return (Brush)Application.Current.Resources["PhoneForegroundBrush"]; }
        }

        private static readonly Brush textboxBrush;
        public static Brush TextboxBrush
        {
            get
            {
                
                return textboxBrush;
            }
        }

        public static Color TextboxColor
        {
            get
            {
                return Color.FromArgb(255, 210, 210, 210);
            }
        }

        private static readonly Brush textboxEditBrush;
        public static Brush TextboxEditBrush
        {
            get
            {
                return textboxEditBrush;
            }
        }

        public static Color TextBoxEditColor
        {
            get
            {
                return Color.FromArgb(255, 255, 255, 255);
            }
        }
        
        public static bool IsDarkTheme
        {
            get { return (Visibility)Application.Current.Resources["PhoneDarkThemeVisibility"] == Visibility.Visible; }
        }
            
        public static bool IsLandscape
        {
            get
            {
                return orientation == PageOrientation.LandscapeRight ||
                   orientation == PageOrientation.LandscapeLeft;
            }
        }

        private void RaisePropertyChange(string propertyName)
        {
            System.Diagnostics.Debug.Assert(!string.IsNullOrEmpty(propertyName));
            var handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
    }
}
